<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Platform Specific Documentation</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <link href="http://dev.eclipse.org/default_style.css" rel="stylesheet"
 type="text/css">
<style>
table,td,th { font-size: 10pt; font-family: arial, helvetica, geneva;}
</style>
<style media="screen">
th {background-color: #334070; color:#ffffff;}
.on {background-color: #ffff66;}
</style>
<style media="print">
.on {font-weight: bold;}
</style>

</head>
<body style="background-color: rgb(255, 255, 255);">
<table width="100%">
  <tbody>
    <tr>
      <td
 style="background: rgb(0, 128, 192) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"><b><span
 style="color: white;">Proposal</span></b></td>
    </tr>
  </tbody>
</table>
<center>
<h2>Proposal: Platform Specific Documentation</h2>
</center>
<h3>Abstract</h3>
The documentation in Eclipse currently lacks the ability for ISVs to
override
widget set specific screenshots and lacks the ability to turn off or
override
platform specific content. This proposal attempts to address these
issues by
adding support for resource overriding to the help system and by adding
CSS
class tags documentation with platform specific content.
<h3>Requirements</h3>
<p>A complete solution would satisfy the following requirements: </p>
<ol>
  <li>Replaceable resources (screenshots, HTML files and CSS files)</li>
  <li>Control over the display of platform specific content</li>
  <li>The solution should allow the documentation to be customized
without the need to modify the base documentation plug-ins</li>
</ol>
<h3>Proposal</h3>
<h4>Replaceable Resources - Screenshots and HTML files</h4>
<p>To allow ISVs the ability to provide their own platform / widget set
specific resources in a custom fragment, the search path for resources
in a
documentation plug-in needs to be expanded. Currently, only the $nl$
directories are searched. The proposed search path adds widget set (ws)
and
operating system (os) to the existing natural language (nl) search
path. An ISV
can override files by contributing a fragment containing the files
which need
to be overridden in the correct directory. The search order will be ws,
then os
and finally nl. Compressed files in "doc.zip" will continue to be
searched
before files that are not compressed.</p>
<p>As an example, the search path for zh_CN locale with gtk
widget set on Linux would be:<br>
</p>
<ul>
  <li>/ws/gtk/doc.zip!file</li>
  <li>/os/linux/doc.zip!file</li>
  <li>/nl/zh/CN/doc.zip!file</li>
  <li>/nl/zh/doc.zip!file</li>
  <li>/doc.zip!file</li>
  <li>/ws/gtk/file</li>
  <li>/os/linux/file</li>
  <li>/nl/zh/CN/file</li>
  <li>/nl/zh/file</li>
  <li>/file</li>
</ul>
<p>This allows widget set and operating system specific documentation
to
be
contributed (in fragments) and
displayed without altering the
existing doc plug-ins. If no
fragment is
installed the end result would
be exactly the same as it is in the current
help system. To accomplish this, the help system will have to use the
system's nl, ws, and os settings to explicitly search the possible
paths for
the file. The use of $nl$, $ws$, and $os$, accepted by the
Platform.find() API,
must be avoided in the help system to ensure the root
directory is not searched to early (or multiple times).
</p>
<p>This solution allows ISVs to have a documentation fragment that
contains
either resources from a single language with multiple widget sets /
operating
systems <b>or</b> resources from the same widget set or operating
system with
different languages. The solution does not allow for all permutations
of
language, operating system and widget set to be placed in one fragment
-
separate fragments would still
be required. For example, an ISV could make a fragment
that has gtk-English and gtk-Chinese resources by placing the resources
in the
appropriate nl folders. In a separate fragment, this ISV could also
support
carbon-English and gtk-English by placing the files in the appropriate
ws directory. This lack of support for all
permutations is
not problematic as this requirement is relatively rare and if the need
should
arise, there is a way to handle it. It should be noted that the
Eclipse SDK
language pack does not contain language specific screenshots.</p>
<h4> Control Over The Display of Platform Specific Content</h4>
<p>The current documentation in Eclipse SDK has a mix of both platform
and
widget set specific content. This content will be marked with
appropriate CSS
classes to give ISVs control over which of the platform and / or widget
set
specific content is displayed. The information described below is
currently a
draft of the final solution. The documentation from eclipse.org will be
marked
up over the next little while to test if this solution will work. There
may be
some minor changes.</p>
<p>Platform specific content will be marked with either: <br>
</p>
<ul>
  <li>class=all_os_ws (for generic documentation that displays
  the operation of all operating systems and widget sets)
  <li>class=default_os (not win32, ie. executable names that do not
have .exe) </li>
  <li>class=win32 (OLE, DND and .exe executable names) </li>
</ul>
Widget Set specific content will be marked with these: <br>
<ul>
  <li>class=default_ws (things that apply to all widget sets except the
ones marked below - Windows is in this category)</li>
  <li>class=gtk (widget used on Unix-like platforms - including Linux)</li>
  <li>class=carbon (widget set used on Mac OS X)</li>
</ul>
<p>The idea is that content common to most supported platforms and
widget sets falls under the default category. This designation has
nothing to do with the popularity of a given platform. Content specific
to just a few
platforms and widgets sets is tagged with the appropriate CSS classes
described
above. So far we have
identified that only win32, gtk, and carbon classes are needed to
differentiate content that is not common to all. The set of
classes can be expanded if the need arises.
</p>
<p>The CSS file will reside in the root of product plug-in
(PRODUCT_PLUGIN/book.css). References to this CSS file will be prefixed
with PRODUCT_PLUGIN in the HTML of all the documentation. This allows
ISVs to
override the default CSS file with a custom CSS file in the root of
their
branding plug-in. This CSS file would specify which platforms and
widget sets
should not be displayed.</p>

<p>The Eclipse SDK will ship with its CSS file in
org.eclipse.platform/book.css, and this will call a bookos.css file 
that sets default_os, win32, default_ws, gtk, and carbon <b>off</b>
(the remaining class, all_os_ws remains on). 
</p>

<p>ISVs can also achieve
automatic selection of marked up content with multiple
style sheets read by the help system; which CSS files are used is determined by the system settings.
In this case the branding plug-in will have a book.css file and one or two additional CSS
files, one to disable all but particular platform-specific content, and optionally a second to  
disable all but particular widget-set specific content. The help system resource
resolution will apply the appropriate CSS
files to the product (branding)
plug-in. </p>

<table border="1" cellpadding="3" cellspacing="0">
<tr><th rowspan="3">O/S</th><th colspan="6">CSS</th></tr>
<tr><th colspan="2">Path names</th><th colspan="3">Help Key</th><th rowspan="2" width="75" valign="bottom">all_os_ws</th></tr>
<tr><th width="75">win32</th><th>default_os</th><th width="75">gtk</th><th width="75">carbon</th><th>default_ws</th></tr>

<tr><td>Win32</td><td class="on">on</td><td>off</td><td>off</td><td>off</td><td class="on">on</td><td>off</td></tr>
<tr><td>Linux Gtk</td><td>off</td><td class="on">on</td><td class="on">on</td><td>off</td><td>off</td><td>off</td></tr>
<tr><td>Linux&nbsp;Other</td><td>off</td><td class="on">on</td><td>off</td><td>off</td><td class="on">on</td><td>off</td></tr>

<tr><td>Mac</td><td>off</td><td class="on">on</td><td>off</td><td class="on">on</td><td>off</td><td>off</td></tr>
<tr><td>Unix Gtk</td><td>off</td><td class="on">on</td><td class="on">on</td><td>off</td><td>off</td><td>off</td></tr>
<tr><td>Unix Other</td><td>off</td><td class="on">on</td><td>off</td><td>off</td><td class="on">on</td><td>off</td></tr>

<tr><td>Generic</td><td>off</td><td>off</td><td>off</td><td>off</td><td>off</td><td class="on">on</td></tr>
</table>

<p>The directory structure is as follows:</p>

<ul>
  <li>PRODUCT_PLUGIN/book.css (needs to import a bookos.css)</li>
  <li>For Windows, a single CSS file, PRODUCT_PLUGIN/os/win32/bookos.css,
  as there is only one widget set. This sets win32 on, default_ws on; all_os_ws off, default_os off, 
  gtk off, carbon off.</li>
  <li>For gtk, a single CSS file, PRODUCT_PLUGIN/ws/gtk/bookos.css,
  as this widget set implies the operating system. 
  This sets default_os on, gtk on; 
  all_os_ws off, win32 off, carbon off, default_ws off.</li>
  <li>For Mac, a single CSS file, PRODUCT_PLUGIN/ws/carbon/bookos.css, that sets  
  default_os on, carbon on; all_os_ws off, win32 off, gtk off, default_ws off.</li>
</ul>

<p>The book.css for each of the cases noted above imports a single bookos.css file,
because these cases have operating systems that imply the widget set, or a widget
set that implies the operating system.
An ISV that wants to release a version of Eclipse that runs under Windows, Unix gtk and 
some other Unix widget set would need to call a book.css that imports a bookos.css
(which would disable either win32 or default_os) and a bookws (which would disable
all_os_ws, carbon, and either gtk or default_ws).
</p>
 
<p>Sample CSS files will be part of this solution so that ISVs can
easily achieve this automatic selection. </p>

<p>All of this means that the documentation
<b>must</b> be written in such a way that it makes sense both when the
all_os_ws content is displayed and when only one class of content is displayed. 
Therefore the source HTML files will have duplicated content, but the help browser
will show only the content that is appropriate for the user.
This point will be stressed in the documentation style guide and an example will
be given.</p>

<h4>Solution Should Allow Customization Without Modification To The Doc
Plug-ins</h4>

<p>This solution allows the eclipse.org documentation to be customized
without modification.</p>
<h3>Issues</h3>
<p>This section describes some of the issues that were encountered and
possible solutions to these issues.</p>
<h4> PDF Generation</h4>
<p>Currently, the SDK PDFs on eclipse.org are generated with htmldoc
which does
not support CSS. This does not pose a problem for Eclipse SDK PDFs
because they
will be displaying content for all platforms. This will, however, pose
a problem for
ISVs who wish to generate PDFs that display content for only one
platform and/or
widget set.</p>
<p>A solution to this is to use fully validating XHTML for all of the
documentation in the Eclipse SDK. This allows ISVs to convert to other
formats
by writing an XSLT style-sheet and/or by using one of the plethora of
XML
conversion tools that exist.</p>
<p>Unfortunately, certain doctypes (XHTML) are not properly supported in
Internet Explorer and cause an unneeded scrollbar to appear, therefore this
remains an outstanding issue.</p>

<h4>Searching</h4>

<p>The searching mechanism in the help system currently doesn't support CSS and
thus a user will get inaccurate search results if an ISV chooses to hide some
platform or widget set specific content. The easiest solution is to add
rudimentary CSS support to the help system. The plan is to add support for only
the CSS tags that are described in this document.

<h4>Remote Info Centres</h4>

<p>By default, the Eclipse SDK will show content for all platforms and widget
sets. If an administrator wishes to change this, they can add a custom branding
plug-in, or fragments to the existing branding plug-in, to override the default
CSS file. The administrator can also add fragments to the documentation with
platform and widget set specific screenshots and HTML files.&nbsp; As part of
this proposal, we will add support for command line parameters that can
override actual OS and WS of the system hosting the info center.</p>

<h3>TODO</h3>

<ul>
  <li>Implement resource resolution for screenshots, HTML and CSS files</li>
  <li>Create sample CSS (book.css and bookws.css) files for testing
automatic content display</li>
  <li>Add CSS support to the HTML parser used by the search facilities
in the help system</li>
  <li>Mark up the platform and widget set specific content in the
documentation with the new CSS classes</li>
  <li>Change the HTML to get the CSS files from ../PRODUCT_PLUGIN/book.css </li>
  <li>Consolidate all of the 5 CSS files if they are different</li>
  <li>Move the consolidated CSS file to org.eclipse.platform/book.css</li>
  <li><img src="small_check.png">Create a style guide for documentation writers - PNG as standard image format <br />
      See: <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-doc-home/docs/EclipseStyle.htm">
      http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-doc-home/docs/EclipseStyle.htm</a></li>
  <li>Implement info center os and ws command line parameters</li>
</ul>

<h3>Authors</h3>

<p>This proposal can be mostly blamed on <a
 href="mbehm_att_redhat_dott_com">Michael Behm</a>,
<a href="konradk_att_ca_dott_ibm_dott_com">Konrad Kolosowski</a>,
<a href="bkonrath_att_redhat_dott_com">Ben Konrath</a> and
<a href="jpound_att_redhat_dott_com">Jeff Pound</a>
</p>
<h3>ChangeLog</h3>
<ul>
  <li>17 Jan 2005: Add link to style guide. </li>
  <li>29 Nov 2004: Initial version posted. </li>
</ul>
</body>
</html>
